home *** CD-ROM | disk | FTP | other *** search
- window.addEventListener("load", function() { progressListener.init(); }, false);
- var progressListener = {
- init: function() {
- document.getElementById("appcontent").addEventListener("DOMContentLoaded", this.onPageLoad, true);
- },
- onPageLoad: function(aEvent) {
- if (aEvent.target.defaultView.window == aEvent.target.defaultView.window.parent) {
- Chitika.Tweeter.initiate( aEvent.originalTarget );
- }
- }
- }
-
- // Initiate Chitika Engine
- if(!window.Chitika){ Chitika = {}; }
-
- // Create Module
- Chitika.Tweeter = {};
-
- // Configuration
- var clickX, clickY;
- var tooltipOffsetX = 20;
- var tooltipOffsetY = 15;
- var minChars = 5;
- var maxChars = 1000;
- var ffExtVer = "1.3";
- var processURL = "http://labs.chitika.com/TinyTweet/tweet.php?ffext=" + ffExtVer + "&q=";
- var lastSelection = "";
- var tinyTweetMouseOver = false;
- var tinyTweetLink = ""; // URL for to-be-clicked link
- var tinyTweetLastLink = "";
- var tinyTweetWindow = null;
-
- /******* Initiate Tweeter *******/
- Chitika.Tweeter.initiate = function (doc) {
-
- (function(loader){
- loader.loadSubScript("chrome://tinytweet/content/jquery-1.3.2.js");
- })(
- Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(
- Components.interfaces.mozIJSSubScriptLoader
- )
- );
-
- // Setup workspace
- Chitika.Tweeter.setup(doc);
-
- // Register Registers (heh :D)
- jQuery(doc).mousedown(function(e) { Chitika.Tweeter.register(e, doc); });
-
- // Register Processing
- jQuery(doc).mouseup(function(e) { Chitika.Tweeter.process(e,doc); });
-
- // Register Mouse Overs
- jQuery(".tweeterHover", content.document).hover(
- function () { tinyTweetMouseOver = true; },
- function () { tinyTweetMouseOver = false; }
- );
-
- // Register Clicking
- jQuery(".tweeterLink", content.document).click(function() {
-
- // Link-Check
- if (tinyTweetLastLink != tinyTweetLink) {
- tinyTweetLastLink = tinyTweetLink;
-
- // Close window if opened
- if (tinyTweetWindow != null && !tinyTweetWindow.closed) {
- tinyTweetWindow.close();
- }
-
- // Open new window
- tinyTweetWindow = window.open(tinyTweetLink, "tinyTweetWindow", "chrome,width=800,height=600,resizable=yes");
- tinyTweetWindow.focus();
-
- }
-
- // Hide Link
- //jQuery(".tweeterHover", content.document).fadeOut(1000);
- jQuery(".tweeterHover", content.document).css("display", "none");
-
- });
- }
-
- /******* URL Encode/Decode *******/
- Chitika.Tweeter.urlencode = function (str) {
- return escape(str).replace(/\+/g, '%2B').replace(/%20/g,'+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/\@/g, '%40');
- }
- Chitika.Tweeter.urldecode = function (str) {
- return unescape(str.replace(/\+/g, ' '));
- }
-
- /******* Process Seleted Text *******/
- Chitika.Tweeter.process = function(e, doc){
-
- // Get Selection, convert to string & trim it
- var focusedWindow = document.commandDispatcher.focusedWindow;
- var selection = focusedWindow.getSelection().toString().replace(/^\s+|\s+$/g,"");
-
- // Get selection, convert to string & trim it
- if (lastSelection == selection) { return; } else { lastSelection = selection; }
- if(selection != "" && selection.length >= minChars && selection.length <= maxChars) {
- var diffX = (clickX + e.pageX) / 2;
- var diffY = (clickY + e.pageY) / 2;
-
- /*
- // Check if clean
- if (selection.indexOf(";") == -1 && selection.indexOf("<") == -1 &&
- selection.indexOf(">") == -1 && selection.indexOf("(") == -1 &&
- selection.indexOf(")") == -1 ) {
-
- // Complete selection
- selection = Chitika.Tweeter.completeSelection(selection);
- }
- */
-
- // Set X
- if (diffX > 0) { jQuery(".tweeterHover", content.document).css("left", diffX - tooltipOffsetX);
- } else if (diffX < 0) { jQuery(".tweeterHover", content.document).css("left", diffX + tooltipOffsetX);
- } else { jQuery(".tweeterHover", content.document).css("left", e.pageX + tooltipOffsetX); }
-
- // Set Y
- jQuery(".tweeterHover", content.document).css("top", e.pageY + tooltipOffsetY);
-
- // Generate URL
- tinyTweetLink = processURL + Chitika.Tweeter.urlencode(selection);
-
- // Fade In
- //jQuery(".tweeterHover", content.document).fadeIn("slow");
- jQuery(".tweeterHover", content.document).css("display", "block");
-
- }
-
- }
-
- /******* Complete user-made selection (prev/next chars) *******/
- Chitika.Tweeter.completeSelection = function(str) {
-
- // Find Container
- var container = jQuery('*:contains("'+str+'"):last', content.document);
- if (container.length == 0) return str;
-
- // Capture, convert and trim text.
- container = $(container).html().toString().replace(/^\s+|\s+$/g,"").replace(/\t/g,"");
- var findIndex = container.indexOf(str);
- if (findIndex == -1) return str;
-
- // Config
- maxTries = 15;
-
- // Attempt previous
- var prevTry = true, prevStr = "", prevChar = "", charCount = 0;
- do {
- prevChar = container.substr(findIndex - (charCount += 1), 1)
- //console.debug("Previous: Looping on " + charCount + " -- char = [" + prevChar + "] | prevStr = " + prevStr + " SUm => " + (findIndex - charCount) + " | Index => " + findIndex);
- if (prevChar != " " && prevChar != ">" && charCount <= maxTries && (findIndex - charCount) >= 0) {
- prevStr = prevChar + prevStr;
- } else { prevTry = false; }
- } while (prevTry);
-
- // Attempt next
- var nextTry = true, nextStr = "", nextChar = "", charCount = -1;
- do {
- nextChar = container.substr(findIndex + str.length + (charCount += 1), 1)
- //console.debug("Next: Looping on " + charCount + " -- char = " + nextChar + " | nextStr = " + nextStr);
- if (nextChar != " " && nextChar != "<" && nextChar != "" && nextChar != "," && charCount <= maxTries) {
- nextStr += nextChar;
- } else { nextTry = false }
- } while (nextTry);
-
- // Compile and return
- return prevStr + str + nextStr;
- }
-
- /******* Register Initial Click / Fadeout *******/
- Chitika.Tweeter.register = function(e, doc) {
-
- // Record initial click positions
- clickX = e.pageX;
- clickY = e.pageY;
-
- // Fade out
- //jQuery(".tweeterHover", content.document).hide("slow");
- if (tinyTweetMouseOver == false) jQuery(".tweeterHover", content.document).css("display", "none");
- }
-
- /******* Setup Workstation *******/
- Chitika.Tweeter.setup = function(doc){
-
- // Generate Elements
- var tweeterHover = jQuery("<div>")
- .css("z-index","99999")
- .css("width", "114px")
- .css("height", "47px")
- .css("background-image", "url('chrome://tinytweet/content/bg.png')")
- .css("position", "absolute")
- .css("display", "none")
- .addClass("tweeterHover");
- var tweeterBody = jQuery("<div>")
- .css("width", "100px")
- .css("height", "25px")
- .css("margin", "15px 7px 0px 7px");
- var tweeterIcon = jQuery("<div>")
- .css("padding", "4px")
- .css("float", "left");
- var tweeterText = jQuery("<div>")
- .css("padding", "5px 0px 0px 5px")
- .css("float", "left")
- .css("color", "#2276BB")
- .css("cursor", "pointer");
- var tweeterIMG = jQuery("<img>")
- .css("height", "16px")
- .css("width", "16px")
- .css("background-image", "url('chrome://tinytweet/content/icon.png')");
- var tweeterLink = jQuery("<a>")
- .attr("href", "#")
- .text("Tweet this")
- .css("font-size","12px")
- .addClass("tweeterLink");
-
- var tweeterStyle = "";
- tweeterStyle += ".tweeterHover { color:#2276BB !important; font-size: 12px; }";
- tweeterStyle += ".tweeterHover a:link { color:#2276BB !important; text-decoration:none !important; }";
- tweeterStyle += ".tweeterHover a:visited { color:#2276BB !important; text-decoration:none !important; }";
- tweeterStyle += ".tweeterHover a:hover { color:#2276BB !important; text-decoration:underline !important; }";
- tweeterStyle += ".tweeterHover a:active { color:#2276BB !important; text-decoration:none !important; }";
- tweeterStyle += ".tweeterHover { margin: 0; padding: 0; border: 0; font-size: 100%; line-height: 1; list-style: none; }";
- tweeterStyle += ".tweeterHover { font: 12px 'Lucida Grande', Verdana, Verdana, Arial, Helvetica, sans-serif; }";
-
- // Compile set
- tweeterHover.append(tweeterBody);
- tweeterBody.append(tweeterIcon);
- tweeterIcon.append(tweeterIMG);
- tweeterBody.append(tweeterText);
- tweeterText.append(tweeterLink);
-
- // Add Style
- jQuery(doc.body).prepend('<style type="text/css">'+tweeterStyle+'</style>');
-
- // Finally, append all to body
- jQuery(doc.body).prepend(tweeterHover);
-
- // Ensure color on link element
- jQuery('.tweeterLink', content.document).css('color', '#2276BB');
- jQuery('.tweeterLink', content.document).hover( function(){
- $(this).css("font-size","12px");
- $(this).css('color', '#2276BB');
- }, function(){
- $(this).css("font-size","12px");
- $(this).css('color', '#2276BB');
- });
-
-
- }
-